package com.android.example.app3;

import static androidx.constraintlayout.helper.widget.MotionEffect.TAG;

import android.content.Context;
import android.util.Log;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExpressNumberValidator {
    // 存储有效的快递公司前缀
    private static final List<String> VALIDPREFIXES = new ArrayList<>();
    // 存储对应前缀的有效单号长度
    private static final List<Integer> VALIDLENGTHS = new ArrayList<>();
    private static final List<String> namingList = new ArrayList<>();

    // 构造函数
    public ExpressNumberValidator() {
        // 初始化默认规则
        addExpressRule("JT", 15);
        addExpressRule("7", 14);
        addExpressRule("7", 15);
        addExpressRule("SF", 15);
        addExpressRule("YT", 15);
        addExpressRule("DPT", 14);
        addExpressRule("ZJS", 15);
        addExpressRule("JD", 15);
        addExpressRule("4", 15);

    }

    // 验证快递单号是否有效
    public static boolean isValidExpressNumber(String number) {

        // 检查单号是否为空
        if (number == null || number.isEmpty()) {
            return false;
        }
        // 遍历所有排除的规则，检查单号是否符合排除规则
        for (String prefix : namingList) {
            if (number.startsWith(prefix)) {
                return false; // 找到匹配的前缀，返回false
            }
        }
        // 遍历所有有效的规则，检查单号是否符合任一规则
        for (int i = 0; i < VALIDPREFIXES.size(); i++) {
            String prefix = VALIDPREFIXES.get(i);
            int length = VALIDLENGTHS.get(i);
            // 如果单号以特定前缀开始且长度符合要求，则返回true
            if (number.startsWith(prefix) && number.length() == length) {
                    return true;
            }
        }

        // 如果没有符合的规则，则返回false
        return false;
    }

    // 更新规则文件并重新加载规则
    public static void updateRulesFile(Context context) {
        // 获取应用专属外部存储目录下的规则文件
        // 规则文件的File对象
        File rulesFile = new File(context.getExternalFilesDir(null), "rules.txt");
        File namingFile = new File(context.getExternalFilesDir(null), "naming.txt");
        // 检查规则文件是否存在
        if (rulesFile.exists()) {
            try (BufferedReader reader = new BufferedReader(new FileReader(rulesFile))) {
                String line;
                // 逐行读取规则文件
                while ((line = reader.readLine()) != null) {
                    String[] parts = line.split(",");
                    // 检查行是否包含前缀和长度两部分
                    if (parts.length == 2) {
                        VALIDPREFIXES.add(parts[0]);
                        VALIDLENGTHS.add(Integer.parseInt(parts[1]));
                    }
                    Log.d("updateRulesFile:", "更新规则文件并重新加载规则");
                }
            } catch (IOException e) {
                // 日志记录错误，实际应用中需要记录日志
                Log.e(TAG, "updateRulesFile: ", e);
            }
        }
        // 检查规则文件是否存在
        if (namingFile.exists()) {
            try (BufferedReader reader = new BufferedReader(new FileReader(namingFile))) {
                String line;
                // 逐行读取规则文件
                while ((line = reader.readLine()) != null) {
                    namingList.add(line);
                    Log.d("updateNamingFile:", "更新规则文件并重新加载规则");
                }
            } catch (IOException e) {
                // 日志记录错误，实际应用中需要记录日志
                Log.e(TAG, "updateNamingFile: ", e);
            }
        }
    }


    // 添加快递规则
    public void addExpressRule(String prefix, int length) {
        // 将前缀和长度添加到列表中
        VALIDPREFIXES.add(prefix);
        VALIDLENGTHS.add(length);
        // 不再保存到文件
    }


}
